package main

//导入驱动
import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

// 定义一个全局对象db
var dab *sql.DB

// 定义一个初始化数据库函数
func initDaB() (err error) {
	dsn := "root:123456@tcp(127.0.0.1:3306)" + "/go_db?charset=utf8mb4&parseTime=true"
	//不会校验账号密码正确
	//注意!!!这里不要使用 := ，我们是全局变量赋值，然后在main函数这种使用全局变量db
	dab, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}

	// See "Important settings" section.
	dab.SetMaxIdleConns(10)               //保持连接的最大空闲连接数
	dab.SetMaxOpenConns(10)               //最大连接数
	dab.SetConnMaxLifetime(7 * time.Hour) //闲置连接的最大存活时间

	err = dab.Ping() //尝试与数据库连接
	if err != nil {
		return err
	}
	return nil
}

// 插入、更新、删除都使用Exec方法
// func (db *DB) Exec(query string,args ...interface{}) (result,error) {}
func updateData(username, password string, n int) {
	sqlStr := "update user_tbl set username=?,password=? where id = ?" //插入
	ret, err := dab.Exec(sqlStr, username, password, n)
	if err != nil {
		fmt.Printf("update failed,err:%v\n", err)
		return
	} else {
		rows, err := ret.RowsAffected()
		if err != nil {
			fmt.Printf("update failed,err:%v\n", err)
			return
		}
		fmt.Printf("update success:%V\n", rows)
	}
}

func main() {
	err := initDaB()
	if err != nil {
		fmt.Printf("初始化失败!,err:%v\n", err)
	} else {
		fmt.Println("初始化成功...")
	}
	updateData("张三丰", "zsf123", 2) //更新
}
